from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models

from User.manager import SiteUserManager


class SiteUser(AbstractUser):
    nickname = models.CharField(max_length=255, verbose_name="昵称", null=False,
                                unique=True)  # 如果要`USERNAME_FIELD = 'nickname'` 这里必须是unique=True

    role = models.CharField(max_length=255, null=True, default="")  # 角色身份 可以用于权限判断

    def need_role(self, *roles):
        """
        用户是否满足某个【角色列表】
        角色列表表示外部传来的验证用户是否属于列表中某一个角色的
        如用户是`教师,管理员`角色 角色列表是 `校长,教师,行政`那么返回满足
        """
        my_roles = self.role.split(",")
        if len(roles) > 0:
            if my_roles in roles:
                return True  # 如果用户的某个权限满足角色列表的其中一个
            return False  # 如果都不满足
        return True  # 如果角色列表是空的那么表示不需要权限

    def has_perm(self, perm, obj=None):
        if self.is_superuser:
            return True

        return super().has_perm(perm, obj)

    def has_module_perms(self, app_label):
        if self.is_superuser:
            return True

        return super().has_module_perms(app_label)

    objects = SiteUserManager()


class Resource(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    user = models.ForeignKey(SiteUser, on_delete=models.CASCADE)


class Comment(models.Model):
    """
    评论
    """

    is_approved = models.BooleanField(default=False)
    comment_content = models.TextField()
    user = models.ForeignKey(SiteUser, on_delete=models.CASCADE)
    is_del = models.BooleanField(default=False)


class CommentLikeHistory(models.Model):
    user = models.ForeignKey(SiteUser, on_delete=models.CASCADE)


if __name__ == '__main__':
    SiteUser.objects.create_user(username="test", password="123123")
